iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 6
0

jQuery 是個好東西,對學習來說是這樣。前面的 JS 原生 API,通常都很長 document....之類的,jQuery 大大的節省了很多空間,並且閱讀 jQuery的 source code,是一個很好的認識 JS 的範本。
這邊順便記錄一些 Ajax 相關的紀錄

學習資源

筆記

Learn.jQuery

Key Word: Using jQuery Core, Ajax, Plugins

Using jQuery Core

  • $ vs $()
  • $(document).ready(): 網頁 執行完 DOM 部分,才會執行 Javascript 的部分
  • $(window).on ("onload", function (){}): 網頁執行完所有的事情 (image 或 iframes,不只是 DOM) 才會開始執行
  • Selecting Form Elements :checked, :disabled, :enabled, :inputs, :selected. etc...
    $( "form :checked" );
    

Ajax (Asynchromous Javascript And XML )

  1. Key Concepts
    1. GET, POST, Data Types
    2. Asynchronous
      // Not work
      var response;
      $.get( "foo.php", function( r ) {
          response = r;
      });
      console.log( response ); // undefined
      // Need to pass a callback function
      $.get( "foo.php", function( response ) {
          console.log( response ); // server response
      });
      
  2. jQuery's Ajax-Related Method
    1. Ref
    2. $.ajax(): 建立 Ajax requests
    3. Ajax and Forms
    4. Working with JSONP
  3. 跟其他網頁要資料
    <body>
        <div>
            <span onclick="getData();">第一次</span>
            <span>跟其他網頁要資料</span>
        </div>
        <hr/>
        <div id="content"></div>
        <script type="text/javascript">
            var req = new XMLHttpRequest();
            req.open("get", "https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20geo.places%20where%20text%3D%22san%20francisco%2C%20ca%22&format=json&diagnostics=true&callback=");
            req.onload = function() {
                //連線完成
                var content = document.getElementById("content");
                content.innerHTML = this.responseText;           
            }
            req.send();
        </script>
    </body>
    
  4. 額外參考
    1. HTTP 中 GET 與 POST 的區別: Ref
    2. 甚麼是 /^\d*$/ ? MDN Regex 正規表達式

Plugins

  1. Finding & Evaluating Plugins
    1. plugin,就是以jQuery為主要,發展jQuery的小工具
    2. jQuery UI, jQuery Plugin Registry
    3. 判斷jQuery plugin 的好壞
  2. Create a Basic Plugin
    1. Basic 與 Chaining
      $.fn.greenify = function() {
          this.css( "color", "green" );
      };
      $( "a" ).greenify(); // Makes all the links green.
      //Chaining
      $.fn.greenify = function() {
          this.css( "color", "green" );
          return this;
      }
      $( "a" ).greenify().addClass( "greenified" );
      
    2. Protecting the $ Alias and Adding Scope: 避免小工具的衝突設計
      (function ( $ ) { 
          var shade = "#556b2f"; 
          $.fn.greenify = function() {
              this.css( "color", shade );
              return this;
          };
      }( jQuery ));
      
    3. Minimizing Plugin Footprint: 簡化小工具使用$.fn
      //簡化前
      (function( $ ) {
          $.fn.openPopup = function() {
              // Open popup code.
          };
          $.fn.closePopup = function() {
              // Close popup code.
          };
      }( jQuery ));
      //簡化後
      (function( $ ) {
          $.fn.popup = function( action ) {
              if ( action === "open") {
                  // Open popup code.
              }
              if ( action === "close" ) {
              // Close popup code.
              }
          };
      }( jQuery ));
      
    4. 使用 each() 方法:如果想對個別元素使用 plugin,可以用 each()
      $.fn.myNewPlugin = function() {
          return this.each(function() {
              // Do something to each element here.
          });
      };
      
    5. Accepting Options: 在小工具中,設計 setting
      (function ( $ ) {
          $.fn.greenify = function( options ) {
              // This is the easiest way to have default options.
              var settings = $.extend({
                  // These are the defaults.
                  color: "#556b2f",
                  backgroundColor: "white"
              }, options );
              // Greenify the collection based on the settings variable.
              return this.css({
                  color: settings.color,
                  backgroundColor: settings.backgroundColor
              }); 
          };
      }( jQuery ));
      //使用
      $( "div" ).greenify({
          color: "orange"
      });
      
    6. Putting It Together
  3. Advanced Plugin Concepts
    1. 允許別人自訂參數
    2. 允許別人對小工具做延伸的小工具
    3. 讓某些需要保留的 function 設定無法被更動:如 debug function
    4. 設計好的 plugin
      1. 避免使用只有只針對 plugin 的元素
      2. 讓每個元素都可以受到控制
      3. 提供可以 callback 的能力 (對 ajax 尤其重要)
      4. 很難且沒有必要對所有情況都設定考慮,所以主要考慮下面三件事情
        • 彈性:多少情況要能夠應付
        • 大小:別做太大、太複雜
        • 效能:別太慢

上一篇
開始 JavaScript
下一篇
A Javascript library: jQuery (w3school)
系列文
網頁服務開發之路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言